package com.holim.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MyViewFlipper extends Activity implements View.OnTouchListener,
CompoundButton.OnCheckedChangeListener {
	CheckBox checkBox;
	ViewFlipper flipper;
	int flipperIndex;
	ImageView view1, view2, view3, view4, view5, view6, 
		view7, view8, view9, viewb1, viewb2,viewb3;
	float xStart;
	float xEnd;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		viewb1 = (ImageView) findViewById(R.id.viewb1);
		viewb2 = (ImageView) findViewById(R.id.viewb2);
		viewb3 = (ImageView) findViewById(R.id.viewb3);
		view1 = (ImageView) findViewById(R.id.view1);
		view2 = (ImageView) findViewById(R.id.view2);
		view3 = (ImageView) findViewById(R.id.view3);
		view4 = (ImageView) findViewById(R.id.view4);
		view5 = (ImageView) findViewById(R.id.view5);
		view6 = (ImageView) findViewById(R.id.view6);
		view7 = (ImageView) findViewById(R.id.view7);
		view8 = (ImageView) findViewById(R.id.view8);
		view9 = (ImageView) findViewById(R.id.view9);
		view1.setOnTouchListener(this);
		view2.setOnTouchListener(this);
		view3.setOnTouchListener(this);
		view4.setOnTouchListener(this);
		view5.setOnTouchListener(this);
		view6.setOnTouchListener(this);
		view7.setOnTouchListener(this);
		view8.setOnTouchListener(this);
		view9.setOnTouchListener(this);
		checkBox = (CheckBox) findViewById(R.id.chkAuto);
		checkBox.setOnCheckedChangeListener(this);
		//flipper  등록 
		flipper = (ViewFlipper) findViewById(R.id.viewFlipper);
		flipper.setOnTouchListener(this);
		// flipper의 첫화면은 0 번쨰 화면
		flipper.setDisplayedChild(0);
		FlipperIndex(flipperIndex);
	}

	/**
	 * Flipper의 현재 페이지 수를 알려주는 매소드
	 * @param index : 현재 페이지 인덱스 값 
	 */
	private void FlipperIndex(int index){
		// 페이지 나타내는 이미지뷰 초기화 
		viewb1.setImageResource(R.drawable.b2);
		viewb2.setImageResource(R.drawable.b2);
		viewb3.setImageResource(R.drawable.b2);

		// 인덱스의 값에 따라 해당 이미지뷰에 표시 
		switch(index){
		case 0:
			viewb1.setImageResource(R.drawable.b1);
			break;
		case 1:
			viewb2.setImageResource(R.drawable.b1);
			break;
		case 2:
			viewb3.setImageResource(R.drawable.b1);
			break;
		}
	}

	/**
	 * 체크박스 체크시 자동으로 Flipping이 되는 부분
	 */
	@Override
	public void onCheckedChanged(CompoundButton view, boolean isChecked) {

		// 체크박스 선택시 자동으로 flopping 됨
		if (isChecked == true) {
			//좌우 슬라이드 애니메이션
			flipper.setInAnimation(AnimationUtils.loadAnimation(this,
					R.anim.push_left_in));
			flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
					R.anim.push_left_out));
			// 화면은 3000 밀리세컨 마다 넘어감
			flipper.setFlipInterval(3000);
			flipper.startFlipping();
		} else {
			// 자동 Flipping 해지
			flipper.stopFlipping();
		}
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// 터치의 시작점과 끝점의 차를 구하여 절대 값을 씌운다 
		// 이 값은 사용자가 터치를 한건지 슬라이드를 한건지 알아내기 위해 사용
		
		float temp_differenceVal = xEnd- xStart;
		float differenceVal = Math.abs(temp_differenceVal);
		// 값이 20 미만이면 터치로 인지하고 flipper내의 오브젝트에 터치에 반응
		if(differenceVal < 20){
			// TODO Auto-generated method stub
			switch (v.getId()) {

			case R.id.view1:
				Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view2:
				Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view3:
				Toast.makeText(getApplicationContext(), "3", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view4:
				Toast.makeText(getApplicationContext(), "4", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view5:
				Toast.makeText(getApplicationContext(), "5", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view6:
				Toast.makeText(getApplicationContext(), "6", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view7:
				Toast.makeText(getApplicationContext(), "7", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view8:
				Toast.makeText(getApplicationContext(), "8", Toast.LENGTH_SHORT)
				.show();
				break;
			case R.id.view9:
				Toast.makeText(getApplicationContext(), "9", Toast.LENGTH_SHORT)
				.show();
				break;
			}
		}
		
		/******************************** Flipper **************************************/
		if (v != flipper)
			return false;
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			xEnd = event.getX(); 
		} else if (event.getAction() == MotionEvent.ACTION_UP) {
			xStart = event.getX(); 
			
			// 시작, 끝점의 차가 50 이상이면 슬라이드로 인지하고 flipper가 동작함
			if (xStart < xEnd) {
				float difVal = xEnd- xStart;
				if(difVal > 50){
					flipper.setInAnimation(AnimationUtils.loadAnimation(this,
							R.anim.push_left_in));
					flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
							R.anim.push_left_out));

					flipper.showNext();
					flipperIndex = flipper.getDisplayedChild();//flipper의 현재 위치 인덱스를 가져옴 
					FlipperIndex(flipperIndex);//flipper의 현재 위치를 들고 페이지 표시 매소드 호출 
				}
			} else if (xStart > xEnd) {
				float difVal = xStart- xEnd;
				if(difVal > 50){
					flipper.setInAnimation(AnimationUtils.loadAnimation(this,
							R.anim.push_right_in));
					flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
							R.anim.push_right_out));
					flipper.showPrevious();
					flipperIndex = flipper.getDisplayedChild();//flipper의 현재 위치 인덱스를 가져옴 
					FlipperIndex(flipperIndex);//flipper의 현재 위치를 들고 페이지 표시 매소드 호출 
				}
			}
		}
		return true;
		/******************************** Flipper **************************************/
	}
}